package models

import (
	beego "github.com/beego/beego/v2/server/web"
	"github.com/redis/go-redis/v9"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"

	"gorm.io/gorm/schema"
	"log"
)

var db *gorm.DB
var Redis *redis.Client
var err error

type MysqlConf struct {
	Username string
	Password string
	Host     string
	Port     string
}

func init() {
	mysqlConf := MysqlConf{
		Username: func() string {
			username, err := beego.AppConfig.String("mysql::username")
			if err != nil {
				// 处理错误，这里简单地 panic，你可以根据实际情况进行适当处理
				panic("获取用户名失败：" + err.Error())
			}
			return username
		}(),
		Password: func() string {
			password, err := beego.AppConfig.String("mysql::password")
			if err != nil {
				// 处理错误，这里简单地 panic，你可以根据实际情况进行适当处理
				panic("获取密码失败：" + err.Error())
			}
			return password
		}(),
		Host: func() string {
			host, err := beego.AppConfig.String("mysql::host")
			if err != nil {
				// 处理错误，这里简单地 panic，你可以根据实际情况进行适当处理
				panic("获取主机地址失败：" + err.Error())
			}
			return host
		}(),
		Port: func() string {
			port, err := beego.AppConfig.String("mysql::port")
			if err != nil {
				// 处理错误，这里简单地 panic，你可以根据实际情况进行适当处理
				panic("获取端口号失败：" + err.Error())
			}
			return port
		}(),
	}
	dsn := mysqlConf.Username + ":" + mysqlConf.Password + "@tcp(" + mysqlConf.Host + ":" + mysqlConf.Port + ")/demo?charset=utf8mb4&parseTime=True&loc=Local"
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true,
		},
	})
	if err != nil {
		log.Println("数据库连接失败", err)
		return
	}
	err = db.AutoMigrate(new(UserTwoWeek), new(GroupTwo), new(GroupMessage), new(FriendTwo), new(Barrage), new(Video), new(VideoEpisode), new(BroadCast))
	if err != nil {
		log.Println("数据表建立失败", err)
		return
	}

	Redis = redis.NewClient(&redis.Options{
		Addr: "localhost:6379",
		DB:   0,
	})
}
